package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import lombok.Data;

/**
 * @desc IndexViewPointDto
 * @使用场景
 */
@Data
public class IndexViewPointDto extends BaseDto implements Serializable {

  /**
   * 被评对象目标周期ID
   */
  @ApiModelProperty("被评对象目标周期ID")
  private String evaObjTargetCycleId;

  /**
   * 被评对象内容表主键ID
   */
  @ApiModelProperty("被评对象内容表主键ID")
  private String evaObjEntityId;

  /**
   * 被评对象内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表
   */
  @ApiModelProperty("被评对象内容表类型编码")
  private String evaObjTableTypeCode;

  /**
   * 被评对象类型编码 EVA_PORTRAIT:评价画像 EVA_OBJECT:评价对象 FLEVEL_OBJ_TASK_DUTY_DEPT:一级部门目标任务责任部门 OKR_SUBJECT_DEPT:OKR责任主体部门 OKR_SUBJECT_PERSONAL:OKR责任主体个人
   */
  @ApiModelProperty("被评对象类型编码")
  private String evaObjTypeCode;

  /**
   * 树类型编码 PLAN_TREE:规划树 EVALUATION_TREE:评价树 DEP_OBJ_MIS_STA:部门目标任务书 DUTY_SUBJECT:OKR责任主体树
   */
  @ApiModelProperty("树类型编码")
  private String treeTypeCode;

  /**
   * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
   */
  @ApiModelProperty("关联目标内容类型编码")
  private String targetCycleContentTypeCode;

  /**
   * 关联目标内容ID
   */
  @ApiModelProperty("关联目标内容ID")
  private String targetCycleContentId;

  /**
   * 冗余目标ID
   */
  @ApiModelProperty("冗余目标ID")
  private String targetId;

  /**
   * 冗余评价模板ID
   */
  @ApiModelProperty("冗余评价模板ID")
  private String evaluationTemplateId;

  /**
   * 周期ID
   */
  @ApiModelProperty("周期ID")
  private String cycleId;

  /**
   * 是否中期 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否中期")
  private String isMetaphase;

  /**
   * 周期名称
   */
  @ApiModelProperty("周期名称")
  private String cycleStandardName;

  /**
   * 周期开始时间
   */
  @ApiModelProperty("周期开始时间")
  private Date cycleStartTime;

  /**
   * 周期结束时间
   */
  @ApiModelProperty("周期结束时间")
  private Date cycleEndTime;

  /**
   * 周期类型名称
   */
  @ApiModelProperty("周期类型名称")
  private String cycleTypeName;

  /**
   * 周期类型实例简称
   */
  @ApiModelProperty("周期类型实例简称")
  private String cycleNumberShortName;

  /**
   * 目标周期简称
   */
  @ApiModelProperty("目标周期简称")
  private String cyclelAlias;

  /**
   * 目标周期名称
   */
  @ApiModelProperty("目标周期名称")
  private String targetCycleName;

  /**
   * 目标达成情况
   */
  @ApiModelProperty("目标达成情况")
  private String targetReached;

  /**
   * 目标周期任务进展状态 NOT_AT_THE:未开始 ONGOING:进行中 HAS_ENDED:已结束
   */
  @ApiModelProperty("目标周期任务进展状态")
  private String taskStatus;

  /**
   * 汇报通过时间
   */
  @ApiModelProperty("汇报通过时间")
  private Date reportUpdateTime;

  /**
   * 虚拟组织下部门ID
   */
  @ApiModelProperty("牵头部门ID")
  private String deptId;

  /**
   * 组织内部门身份名称
   */
  @ApiModelProperty("牵头部门身份名称")
  private String virtualOrgDeptStatus;

  /**
   * 个人账号
   */
  @ApiModelProperty("责任人个人账号ID")
  private String userId;

  /**
   * 组内职务名称
   */
  @ApiModelProperty("责任人职务名称")
  private String virtualOrganizationPosition;

  /**
   * 总时长
   */
  @ApiModelProperty("总时长")
  private Long totalLength;

  /**
   * 延后或剩余天数
   */
  @ApiModelProperty("延后或剩余天数")
  private Long delaySurplusLength;

  /**
   * 完成偏离时长
   */
  @ApiModelProperty("完成偏离时长")
  private Long deviateLength;

  /**
   * 诊断值
   */
  @ApiModelProperty("诊断值")
  private Double targetDiagnosticValue;

  /**
   * 实际值
   */
  @ApiModelProperty("实际值")
  private Double actualValue;

  /**
   * 实际值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("实际值单位")
  private String actualValueUnit;

  /**
   * 进度值
   */
  @ApiModelProperty("进度值")
  private Double progressValue;

  /**
   * 进度值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("进度值单位")
  private String progressValueUnit;

  /**
   * 进度较上次增降幅
   */
  @ApiModelProperty("进度较上次增降幅")
  private Double progressFromLastRatio;

  /**
   * 进度较上次增降幅单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("进度较上次增降幅单位")
  private String progressFromLastRatioUnit;

  /**
   * 达成度
   */
  @ApiModelProperty("达成度")
  private Double reach;

  /**
   * 达成度单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("达成度单位")
  private String reachUnit;

  /**
   * 达成度较上次增降福
   */
  @ApiModelProperty("达成度较上次增降福")
  private Double actualFromLastTimeRatio;

  /**
   * 达成度较上次增降福单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("达成度较上次增降福单位")
  private String actualFromLastTimeRatioUnit;

  /**
   * 实时得分
   */
  @ApiModelProperty("实时得分")
  private Double realTimeScore;

  /**
   * 实时得分单位
   */
  @ApiModelProperty("实时得分单位")
  private String realTimeScoreUnit;

  /**
   * 权重分值
   */
  @ApiModelProperty("权重分值")
  private Double weightScore;

  /**
   * 虚拟组织成员就职记录ID
   */
  @ApiModelProperty("责任人就职记录ID")
  private String virtualOrgInductionRecordId;

  /**
   * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
   */
  @ApiModelProperty("冗余指标业务类型")
  private String targetValueType;

  /**
   * 冗余是否左侧比例型 TRUE:是 FALSE:否
   */
  @ApiModelProperty("冗余是否左侧比例型")
  private String isLeft;

  /**
   * 实时得分等级
   */
  @ApiModelProperty("实时得分等级")
  private String realTimeScoreLevel;

  /**
   * 周期类型标识
   */
  @ApiModelProperty("周期类型标识")
  private String cycleTypeCode;

  /**
   * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
   */
  @ApiModelProperty("周期模式类型编码")
  private String periodicModeTypeCode;

  /**
   * 较上次目标变化值
   */
  @ApiModelProperty("较上次目标变化值")
  private Double changeFromLastTarget;

  /**
   * 较上次目标变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("较上次目标变化值单位")
  private String changeFromLastTargetUnit;

  /**
   * 较上次目标增降幅
   */
  @ApiModelProperty("较上次目标增降幅")
  private Double fromLastTargetLiftRatio;

  /**
   * 较上次目标增降幅单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("较上次目标增降幅单位")
  private String fromLastTargetLiftRatioUnit;

  /**
   * 进度较上次变化值
   */
  @ApiModelProperty("进度较上次变化值")
  private Double fromLastProgressValue;

  /**
   * 进度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("进度较上次变化值单位")
  private String fromLastProgressValueUnit;

  /**
   * 达成度较上次变化值
   */
  @ApiModelProperty("达成度较上次变化值")
  private Double fromLastReach;

  /**
   * 达成度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("达成度较上次变化值单位")
  private String fromLastReachUnit;

  /**
   * 汇报得分（数值）
   */
  @ApiModelProperty("汇报得分（数值）")
  private Double reportScoreValue;

  /**
   * 汇报得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("汇报得分单位")
  private String reportScoreUnit;

  /**
   * 实际得分（数值）
   */
  @ApiModelProperty("实际得分（数值）")
  private Double actualScoreValue;

  /**
   * 实际得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("实际得分单位")
  private String actualScoreUnit;

  /**
   * 是否过程周期阶段 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否过程周期阶段")
  private String isProcessCycleStage;

  /**
   * 汇报得分（文本）
   */
  @ApiModelProperty("汇报得分（文本）")
  private String reportScore;

  /**
   * 实际得分（文本）
   */
  @ApiModelProperty("实际得分（文本）")
  private String actualScore;

  /**
   * 被评对象目标周期标识
   */
  @ApiModelProperty("被评对象目标周期标识")
  private String evaObjTargetCycleCode;

  /**
   * 操作时间
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 展示目标值
   */
  @ApiModelProperty("展示目标值")
  private Double showTargetValue;

  /**
   * 冗余单位
   */
  @ApiModelProperty("目标值单位")
  private String unit;

  /**
   * 目标实际开始时间
   */
  @ApiModelProperty("目标实际开始时间")
  private Date targetActualStartTime;

  /**
   * 目标实际结束时间
   */
  @ApiModelProperty("目标实际结束时间")
  private Date targetActualEndtTime;

  /**
   * 相对上级排序
   */
  @ApiModelProperty("相对上级排序")
  private Long relativeOrderNumber;

  /**
   * 部门排序
   */
  @ApiModelProperty("部门排序")
  private Long dutyBodyOrderNum;

  /**
   * 个人排序
   */
  @ApiModelProperty("个人排序")
  private Long personalOrderNumber;

  /**
   * 权重排序
   */
  @ApiModelProperty("权重排序")
  private Long weightOrderNumber;

  /**
   * 创建时间
   */
  @ApiModelProperty("创建时间")
  private Date createTime;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    IndexViewPointDto that = (IndexViewPointDto) o;
    return (
      evaObjTargetCycleId == that.evaObjTargetCycleId &&
      evaObjEntityId == that.evaObjEntityId &&
      evaObjTableTypeCode == that.evaObjTableTypeCode &&
      evaObjTypeCode == that.evaObjTypeCode &&
      treeTypeCode == that.treeTypeCode &&
      targetCycleContentTypeCode == that.targetCycleContentTypeCode &&
      targetCycleContentId == that.targetCycleContentId &&
      targetId == that.targetId &&
      evaluationTemplateId == that.evaluationTemplateId &&
      cycleId == that.cycleId &&
      isMetaphase == that.isMetaphase &&
      cycleStandardName == that.cycleStandardName &&
      cycleStartTime == that.cycleStartTime &&
      cycleEndTime == that.cycleEndTime &&
      cycleTypeName == that.cycleTypeName &&
      cycleNumberShortName == that.cycleNumberShortName &&
      cyclelAlias == that.cyclelAlias &&
      targetCycleName == that.targetCycleName &&
      targetReached == that.targetReached &&
      taskStatus == that.taskStatus &&
      reportUpdateTime == that.reportUpdateTime &&
      deptId == that.deptId &&
      virtualOrgDeptStatus == that.virtualOrgDeptStatus &&
      userId == that.userId &&
      virtualOrganizationPosition == that.virtualOrganizationPosition &&
      totalLength == that.totalLength &&
      delaySurplusLength == that.delaySurplusLength &&
      deviateLength == that.deviateLength &&
      targetDiagnosticValue == that.targetDiagnosticValue &&
      actualValue == that.actualValue &&
      actualValueUnit == that.actualValueUnit &&
      progressValue == that.progressValue &&
      progressValueUnit == that.progressValueUnit &&
      progressFromLastRatio == that.progressFromLastRatio &&
      progressFromLastRatioUnit == that.progressFromLastRatioUnit &&
      reach == that.reach &&
      reachUnit == that.reachUnit &&
      actualFromLastTimeRatio == that.actualFromLastTimeRatio &&
      actualFromLastTimeRatioUnit == that.actualFromLastTimeRatioUnit &&
      realTimeScore == that.realTimeScore &&
      realTimeScoreUnit == that.realTimeScoreUnit &&
      weightScore == that.weightScore &&
      virtualOrgInductionRecordId == that.virtualOrgInductionRecordId &&
      targetValueType == that.targetValueType &&
      isLeft == that.isLeft &&
      realTimeScoreLevel == that.realTimeScoreLevel &&
      cycleTypeCode == that.cycleTypeCode &&
      periodicModeTypeCode == that.periodicModeTypeCode &&
      changeFromLastTarget == that.changeFromLastTarget &&
      changeFromLastTargetUnit == that.changeFromLastTargetUnit &&
      fromLastTargetLiftRatio == that.fromLastTargetLiftRatio &&
      fromLastTargetLiftRatioUnit == that.fromLastTargetLiftRatioUnit &&
      fromLastProgressValue == that.fromLastProgressValue &&
      fromLastProgressValueUnit == that.fromLastProgressValueUnit &&
      fromLastReach == that.fromLastReach &&
      fromLastReachUnit == that.fromLastReachUnit &&
      reportScoreValue == that.reportScoreValue &&
      reportScoreUnit == that.reportScoreUnit &&
      actualScoreValue == that.actualScoreValue &&
      actualScoreUnit == that.actualScoreUnit &&
      isProcessCycleStage == that.isProcessCycleStage &&
      reportScore == that.reportScore &&
      actualScore == that.actualScore &&
      evaObjTargetCycleCode == that.evaObjTargetCycleCode &&
      operateTime == that.operateTime &&
      showTargetValue == that.showTargetValue &&
      unit == that.unit &&
      targetActualStartTime == that.targetActualStartTime &&
      targetActualEndtTime == that.targetActualEndtTime &&
      relativeOrderNumber == that.relativeOrderNumber &&
      dutyBodyOrderNum == that.dutyBodyOrderNum &&
      personalOrderNumber == that.personalOrderNumber &&
      weightOrderNumber == that.weightOrderNumber &&
      createTime == that.createTime
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      evaObjTargetCycleId,
      evaObjEntityId,
      evaObjTableTypeCode,
      evaObjTypeCode,
      treeTypeCode,
      targetCycleContentTypeCode,
      targetCycleContentId,
      targetId,
      evaluationTemplateId,
      cycleId,
      isMetaphase,
      cycleStandardName,
      cycleStartTime,
      cycleEndTime,
      cycleTypeName,
      cycleNumberShortName,
      cyclelAlias,
      targetCycleName,
      targetReached,
      taskStatus,
      reportUpdateTime,
      deptId,
      virtualOrgDeptStatus,
      userId,
      virtualOrganizationPosition,
      totalLength,
      delaySurplusLength,
      deviateLength,
      targetDiagnosticValue,
      actualValue,
      actualValueUnit,
      progressValue,
      progressValueUnit,
      progressFromLastRatio,
      progressFromLastRatioUnit,
      reach,
      reachUnit,
      actualFromLastTimeRatio,
      actualFromLastTimeRatioUnit,
      realTimeScore,
      realTimeScoreUnit,
      weightScore,
      virtualOrgInductionRecordId,
      targetValueType,
      isLeft,
      realTimeScoreLevel,
      cycleTypeCode,
      periodicModeTypeCode,
      changeFromLastTarget,
      changeFromLastTargetUnit,
      fromLastTargetLiftRatio,
      fromLastTargetLiftRatioUnit,
      fromLastProgressValue,
      fromLastProgressValueUnit,
      fromLastReach,
      fromLastReachUnit,
      reportScoreValue,
      reportScoreUnit,
      actualScoreValue,
      actualScoreUnit,
      isProcessCycleStage,
      reportScore,
      actualScore,
      evaObjTargetCycleCode,
      operateTime,
      showTargetValue,
      unit,
      targetActualStartTime,
      targetActualEndtTime,
      relativeOrderNumber,
      dutyBodyOrderNum,
      personalOrderNumber,
      weightOrderNumber,
      createTime
    );
  }

}
